package com.library.service.admin;

import com.library.dao.BookManageDao;
import com.library.entity.Book;

public class BookManageService {

    private BookManageDao bookManageDao = new BookManageDao();

    /**
     * 根据ID获取书籍详情
     * @param id 书籍ID
     * @return 书籍对象
     */
    public Book getBookById(int id) {
        return bookManageDao.getBookById(id);
    }

    /**
     * 添加新书籍
     * @param book 书籍对象
     * @return 是否添加成功
     */
    public boolean addBook(Book book) {
        try {
            // 检查ISBN是否已存在
            if (bookManageDao.isISBNExists(book.getISBN())) {
                return false;
            }
            return bookManageDao.addBook(book);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 更新书籍信息
     * @param book 书籍对象
     * @return 是否更新成功
     */
    public boolean updateBook(Book book) {
        try {
            // 检查ISBN是否与其他书籍冲突（除了当前书籍）
            Book existingBook = bookManageDao.getBookByISBN(book.getISBN());
            if (existingBook != null && !existingBook.getId().equals(book.getId())) {
                return false;
            }
            return bookManageDao.updateBook(book);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 删除书籍（设置为下架状态）
     * @param id 书籍ID
     * @return 是否删除成功
     * @throws RuntimeException 当有副本正在借出时抛出异常
     */
    public boolean deleteBook(int id) throws RuntimeException {
        try {
            // 检查是否有副本正在借出
            if (bookManageDao.hasBorrowedCopies(id)) {
                throw new RuntimeException("该书籍有副本正在借出");
            }
            return bookManageDao.deleteBook(id);
        } catch (RuntimeException e) {
            throw e; // 重新抛出运行时异常
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 批量删除书籍
     * @param ids 书籍ID数组
     * @return 成功删除的数量
     */
    public int batchDeleteBooks(int[] ids) {
        int successCount = 0;
        for (int id : ids) {
            if (deleteBook(id)) {
                successCount++;
            }
        }
        return successCount;
    }

    /**
     * 检查书籍是否存在
     * @param id 书籍ID
     * @return 是否存在
     */
    public boolean isBookExists(int id) {
        return bookManageDao.getBookById(id) != null;
    }

    /**
     * 恢复书籍上架
     * @param id 书籍ID
     * @return 是否恢复成功
     */
    public boolean restoreBook(int id) {
        try {
            return bookManageDao.restoreBook(id);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
} 